// 8601 最大长方体问题.cpp
//

#include <iostream>
using namespace std;

//长方体：m行,n列,p层
//[m+1,n+1,p+1]


int MaxSum(int n,int *a){
    int sum=0;
    int b=0;
    for(int i=1;i<=n;i++){
        if(b>0)b+=a[i];
        else b=a[i];
        if(sum<b)sum=b;
    }
    return sum;
}

int MaxSum2(int m,int n, int **a){
    int sum=0;
    int *b = new int[n+1];
    for(int i=1;i<=m;i++){
        for(int k=1;k<=n;k++){
            b[k]=0;
        }

        for(int j=i;j<=m;j++){
            for(int k=1;k<=n;k++){
                b[k] += a[j][k];
            }
            int max=MaxSum(n,b);
            if(max>sum)sum=max;
        }

    }
    free(b);
    return sum;
}

int MaxSum3(int m, int n, int p, int ***a){
    int sum=0;
    int **b = new int*[n+1];	//动态分配数组[m+1,n+1]
    for(int i=1;i<=n;i++){
        b[i]=new int[p+1];
    }

    for(int i=1;i<=m;i++){//从第1层开始的所有平面  第2层、第3层...

        for(int j=1;j<=n;j++){
            for(int k=1;k<=p;k++){
                b[j][k] =0;
            }
        }
        for(int t=i;t<=m;t++){//第1层，第1层到第2层，第1层到第3层...  即第i层开始到第t层

            for(int j=1;j<=n;j++){
                for(int k=1;k<=p;k++){
                    b[j][k] += a[t][j][k];  //3维压缩为2维,即相加
                }
            }
            int max = MaxSum2(n,p,b);  //粗心 把这2行代码放到for循环外面了
            if(max>sum)sum=max;     //粗心 把这2行代码放到for循环外面了
            //放里面才是正确的
        }



    }
    free(b);
    return sum;

}



int main()
{

    int m,n,p;
    cin>>m>>n>>p;
    int ***a = new int **[m+1];
    for(int i=0;i<m+1;i++){
        a[i] = new int *[n+1];
        for(int j=0;j<n+1;j++){
            a[i][j] = new int [p+1];
        }
    }

    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            for(int k=1;k<=p;k++){
                cin>>a[i][j][k];
            }
        }
    }
    cout<<MaxSum3(m,n,p,a)<<endl;

    free(a);
    return 0;
}